Cosmos SDK (クエリ ライフサイクル)
一般的なRESTやrpcで言うクエリ
アプリケーションのエンドユーザーがインターフェースを介して行う情報の要求で、フルノードによって処理されます。
ユーザーは、ネットワーク、アプリケーション自体、およびアプリケーションの状態に関する情報を、アプリケーションのストアやモジュールから直接問い合わせることができます。
クエリはトランザクション(ライフサイクルはこちら)とは異なり、特に処理にコンセンサスを必要とせず(状態遷移を起こさないため)、1つのフルノードで完全に処理することができる点に注意が必要です。
CLIコマンドなど、クエリの呼び出し方法はさまざま
アプリケーションとノードの橋渡し
client.Context
ユーザー側でリクエストを処理するために必要なすべてのデータを格納するオブジェクト
主な役割は、エンドユーザーとの対話で使用されるデータを保存し、このデータと対話するためのメソッドを提供すること
フル・ノードはアプリケーションに依存せず、特定の型を理解しないため、フル・ノードに中継される前に、クエリは[]バイト形式にエンコードされる必要がある
この辺はEthereumも同じようにABCIでやりとりしている
クエリの処理
下層のコンセンサス・エンジンから中継された後、フルノードがクエリを受信すると、アプリケーション固有の型を理解し、ステートのコピーを持つ環境で処理されます。
クエリのルートが解析され、それが既存のサービスメソッドの完全修飾名と一致すると、baseappはリクエストを関連するモジュールに中継します。
baseappはアプリ、ストア、P2P、カスタムの4つの異なるタイプのクエリを処理します。